package br.com.gustavobhz.portalcolaborador.pages.ocorrencia;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import org.apache.tapestry5.EventConstants;
import org.apache.tapestry5.OptionModel;
import org.apache.tapestry5.SelectModel;
import org.apache.tapestry5.ValueEncoder;
import org.apache.tapestry5.annotations.Component;
import org.apache.tapestry5.annotations.OnEvent;
import org.apache.tapestry5.annotations.Persist;
import org.apache.tapestry5.annotations.Property;
import org.apache.tapestry5.corelib.components.Form;
import org.apache.tapestry5.hibernate.annotations.CommitAfter;
import org.apache.tapestry5.internal.OptionModelImpl;
import org.apache.tapestry5.internal.SelectModelImpl;
import org.apache.tapestry5.ioc.Messages;
import org.apache.tapestry5.ioc.annotations.Inject;
import org.apache.tapestry5.services.BeanModelSource;
import org.apache.tapestry5.beaneditor.BeanModel;
import org.hibernate.Session;
import org.hibernate.exception.DataException;

import br.com.gustavobhz.portalcolaborador.entidade.Funcionario;
import br.com.gustavobhz.portalcolaborador.entidade.GenericDAO;
import br.com.gustavobhz.portalcolaborador.entidade.MotivoOcorrencia;
import br.com.gustavobhz.portalcolaborador.entidade.Ocorrencia;

public class Cadastro {
	
	@Property
	@Persist
	private Ocorrencia ocorrencia;

	@Inject
	private Session session;
	
	@Inject
	private Messages messages;

	@Persist("flash")
	private String mensagemSucesso;
	
	@Persist("flash")
	private String message;
	
    @Component(id="cadastroForm")
    private Form form;
    
	//form
    @Property
    private Date dataOcorrencia = new java.sql.Date(System.currentTimeMillis());

    @Property
    private String horaOcorrencia;
    
    @Property
	private String observacao;
    
    @Property
	private MotivoOcorrencia motivoOcorrencia;
    
    @Property
    private boolean ativo = true;
    
    private List<Funcionario> funcionarios = new ArrayList<Funcionario>();
    
    @Property
    private Funcionario funcionario;
    
    private static final String MENSAGEM_SUCESSO = "sucesso";
    
    public void onActivate() {
    	if(ocorrencia == null) {
    		ocorrencia = new Ocorrencia();
    	}
    }
    
    @CommitAfter
    void gravar() {
    	dataOcorrencia = new Date();
    	this.ocorrencia.setDataOcorrencia(this.dataOcorrencia);
    	this.ocorrencia.setHoraOcorrencia(this.horaOcorrencia);
    	this.ocorrencia.setObservacao(this.observacao);
    	this.ocorrencia.setMotivoOcorrencia(this.motivoOcorrencia);
    	this.ocorrencia.setFuncionario(this.funcionario);
    	this.ocorrencia.setAtivo(this.ativo);
    	final GenericDAO dao = new GenericDAO(session, Ocorrencia.class);
    	dao.gravar(ocorrencia);
    	ocorrencia = new Ocorrencia();
    }
    
	//Formulário
	@OnEvent(component="cadastroForm", value = EventConstants.SUCCESS)
	void onSuccess() {
		try {
	        gravar();
		} catch (DataException ex) {
			form.recordError("A operação não pode ser realizada, consulte o administrador do sistema.");
		}
			setMessage(messages.get(MENSAGEM_SUCESSO));
	}
	
	//getter and setter
	public Messages getMessages() {
		return messages;
	}
	
	public void setMessages(Messages messages) {
		this.messages = messages;
	}

	public List<Funcionario> getFuncionarios() {
		return funcionarios;
	}

	public void setFuncionarios(List<Funcionario> funcionarios) {
		this.funcionarios = funcionarios;
	}

	public String getMessage() {
		return message;
	}

	public void setMessage(String message) {
		this.message = message;
	}

}